package controller;

import entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;

/**
 * Author:shixiaojun@itany.com
 * Date:2022/7/29 10:21
 * Version:1.0-SNAPSHOT
 * Description:
 */
@Controller
@RequestMapping("/request")
public class RequestController {

    @RequestMapping("/f1")
    public String f1(HttpServletRequest request){
        System.out.println("RequestController.f1");
        User user = new User();
        user.setUsername("admin");
        request.setAttribute("user",user);
        return "scope";
    }

    @RequestMapping("/f2")
    public String f2(User u){
        System.out.println("RequestController.f2");
        u.setUsername("alice");
        return "scope";
    }

    // 当方法的参数满足以下条件,自动添加@ModelAttribute注解
    // 1.当前参数没有被任何注解所标注
    // 2.当前参数是一个对象类型
    // 当自动添加@ModelAttribute(key)注解时
    // 其key的默认值为当前变量的类型,首字母小写
    // 当方法的参数被@ModelAttribute(key)进行标注时
    // 表示当前参数会在request作用域中进行读写
    // 相当于执行了request.setAttribute(key,变量名)
    @RequestMapping("/f3")
    public String f3(@ModelAttribute("u") User user){
        System.out.println("RequestController.f3");
        user.setUsername("alice");
        return "scope";
    }

    // 当方法被@ModelAttribute进行标注时
    // 表示当前方法会在执行当前Controller中的其他任意一个方法之前执行
    // 此时的方法并不是用于专门访问的
    // 而是用于间接访问
    @ModelAttribute
    public void f4(){
        System.out.println("RequestController.f4");
    }

    // 方法可以有返回值
    // 会自动将返回值存储到作用域中
    // 其存储的数据的key即为当前注解的参数
    // 其存储的数据的value即为当前方法的返回值
    @ModelAttribute("users")
    public List<User> loadUsers(){
        User user = new User(1,"admin","123456","13812345678","江苏-南京");
        User user2 = new User(3,"alice","123456","13812345678","江苏-南京");
        User user3 = new User(6,"jack","123456","13812345678","江苏-南京");
        List<User> users = new ArrayList<>();
        users.add(user);
        users.add(user2);
        users.add(user3);
        return users;
    }

}
